package com.yangli.ahies.study.array;

public class Duplicate {
    //在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内。数组中某些数字是重复的，但不知道有几个数字是重复的，也不知道每个数字重复几次。请找出数组中任意一个重复的数字。
    public static void main(String[] args){
        Duplicate duplicate = new Duplicate();
        System.out.println(duplicate.duplicate(new int[]{0, 2, 4, 1, 3, 2}));
    }

    public int duplicate(int[] nums){

        //i表示索引位置 num[0] 索引位置上的值
        for (int i = 0; i < nums.length; i++) {
            while (nums[i] != i) {
                if (nums[i] == nums[nums[i]]) {
                    return nums[i];
                }
                swap(nums, i, nums[i]);
            }
            swap(nums, i, nums[i]);
        }
        return -1;
    }

    public void swap(int[] nums, int i, int j){
        int t = nums[i];
        nums[i] = nums[j];
        nums[j] = t;
    }
}
